package 临时工具.粮仓.粉尘检测;

import java.io.OutputStream;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.util.Arrays;

public class ClientSimulator {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("175.27.138.53", 1884);
        OutputStream out = socket.getOutputStream();

        ByteBuffer buffer = ByteBuffer.allocate(1024);

        // 帧头
        buffer.put((byte) 0x55);
        buffer.put((byte) 0xAA);

        // 占位：长度，待会再填
        int lengthPos = buffer.position();
        buffer.put((byte) 0x00); // placeholder

        // 设备ID: 8位
        buffer.put((byte)0x31);
        buffer.put((byte)0x38);
        buffer.put((byte)0x31);
        buffer.put((byte)0x30);
        buffer.put((byte)0x31);
        buffer.put((byte)0x31);
        buffer.put((byte)0x30);
        buffer.put((byte)0x31);

        // 数据个数
        buffer.put((byte) 4);

        // 示例数据（CO2、PM2.5、温度、湿度）
        buffer.put((byte) 0x01); // CO2
        buffer.put(FloatUtil.floatToBytes(522f));

        buffer.put((byte) 0x02); // PM2.5
        buffer.put(FloatUtil.floatToBytes(19f));

        buffer.put((byte) 0x03); // 温度
        buffer.put(FloatUtil.floatToBytes(26.1f));

        buffer.put((byte) 0x04); // 湿度
        buffer.put(FloatUtil.floatToBytes(49.3f));

        // 计算长度（不包含帧头）
        int contentLen = buffer.position() - 2;
        buffer.put(lengthPos, (byte) contentLen);

        // 计算 CRC
        byte[] contentBytes = Arrays.copyOfRange(buffer.array(), 2, buffer.position());
        int crc = CRC16Util.calculateCRC16(contentBytes, contentBytes.length);
        buffer.put((byte) (crc & 0xFF));       // low byte
        buffer.put((byte) ((crc >> 8) & 0xFF)); // high byte

        // 发送
        out.write(buffer.array(), 0, buffer.position());
        out.flush();
        System.out.println("55 AA 20 31 38 31 30 31 31 30 31 04 01 44 02 80 00 02 41 98 00 00 03 41 D0 CC CD 04 42 45 33 33 7B 19".replaceAll(" ",""));
        System.out.println("数据发送成功");
        socket.close();
    }
}
